﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;

namespace ProggersWTC.Model
{
    public static class Queries
    {
        public static WTCContestEntities entities = new WTCContestEntities();

        /*
         * Vorm query-methode:
         * 
         * public static List<Personen> GetAllPersons()
           {
                return (from pers in entities.Personen
                        select pers).ToList<Personen>();
           }
         */

        public static void OpslaanWijzigingen()
        {
            //entities.SaveChanges();
            entities.SaveChanges(System.Data.Objects.SaveOptions.DetectChangesBeforeSave);
        }

        public static List<Spelers> GetAllSpelersOrdered()
        {
            return (from sp in entities.Spelers
                    orderby sp.Familienaam, sp.Voornaam, sp.Id
                    select sp).ToList<Spelers>();
            //return entities.Spelers.OrderBy(sp => sp.Familienaam).ThenBy(sp => sp.Voornaam).ToList<Spelers>();
        }

        public static void AddSpeler(Spelers speler)
        {
            entities.AddToSpelers(speler);
        }

        public static List<Ploegen> GetAllPloegenOrderedByName()
        {
            return (from pl in entities.Ploegen
                    orderby pl.Naam
                    select pl).ToList<Ploegen>();
        }

        public static void AddPloeg(Ploegen pl)
        {
            entities.AddToPloegen(pl);
            //entities.AddObject("Ploegen", pl);
            OpslaanWijzigingen();
        }

        public static void EditPloeg(Ploegen pl)
        {
            //EntityKey key = entities.CreateEntityKey("Ploegen", pl);
            //object OriginalPloeg = null;
            //if (entities.TryGetObjectByKey(key, out OriginalPloeg))
            //{
                
            //}

            //entities.attach
            OpslaanWijzigingen();
        }

        public static void DeletePloeg(Ploegen pl)
        {
            entities.DeleteObject(pl);
            OpslaanWijzigingen();
        }

        public static List<Reeksen> GetAllReeksenOrderedByName()
        {
            return (from r in entities.Reeksen
                    orderby r.Naam
                    select r).ToList<Reeksen>();
        }

        // niet nodig: stored procedure beschikbaar!
        //public static Reeksen GetReeksById(int id)
        //{
        //    return (from r in entities.Reeksen
        //            where r.Id.Equals(id)
        //            select r).First<Reeksen>();
        //}

        public static List<Klassementen> GetAllKlassementenOrderedByName()
        {
            return (from kl in entities.Klassementen
                    orderby kl.Naam
                    select kl).ToList<Klassementen>();
        }

        public static List<Wedstrijden> GetAllWedstrijdenOrderedByPloegAndSpeelWeek()
        {
            return (from w in entities.Wedstrijden
                    orderby w.PloegId, w.Speelweek
                    select w).ToList<Wedstrijden>();
        }
    }
}
